// cf-39e
// 题意：给定初始a(<=10000)个不同的盒子，b(<=30)个不同的东西，一个数
//       n(<=10^9)，保证一开始a^b < n。现在两个人轮流游戏，每个人可以
//       选择给a加1或者给b加1, 如果某个人操作后a^b >= n，他就输了。
//       如果游戏一直进行下去就是平局。问谁赢或者是平局。
//
// 题解：分析下数据范围，sg可以做，记忆化下。然后要小心边界，
//       当a=1或者b=1的时候是两种情况单独处理。
//
// run: $exec < input
#include <iostream>
#include <cmath>
#include <set>

int const maxn = 33000;
int const maxm = 33;
int f[maxn][maxm];
long long a, b, n;

long long quick(long long a, long long b)
{
	if (!b) return 1;
	long long t = quick(a, b / 2);
	t *= t;
	if (b & 1) t *= a;
	return t;
}

bool judge_less(long long a, long long b, long long n)
{
	if (!b) return 1 < n;
	if (!judge_less(a, b / 2, n)) return false;
	long long t = quick(a, b);
	return t < n;
}

bool judge(int x, int y) { return judge_less(a + x, b + y, n); }

int min_not_in_mex(std::set<int> const & s)
{
	int t = 0;
	for (auto i : s)
		if (i == t) t++;
		else return t;
	return t;
}

int sg(int x, int y)
{
	if (f[x][y] != -1) return f[x][y];
	std::set<int> mex;
	if (judge(x + 1, y)) mex.insert(sg(x + 1, y));
	if (judge(x, y + 1)) mex.insert(sg(x, y + 1));
	return f[x][y] = min_not_in_mex(mex);
}

int main()
{
	std::ios::sync_with_stdio(false);
	for (int i = 0; i < maxn; i++)
		for (int j = 0; j < maxm; j++) f[i][j] = -1;
	std::cin >> a >> b >> n;
	if (a == 1) {
		bool opt = false;
		for (int i = b; ; i++, opt ^= true) {
			if (!judge(1, i - b)) { std::cout << "Missing\n"; break; }
			int t = sg(1, i - b);
			if (!t) { std::cout << (opt ? "Stas" : "Masha") << '\n'; break; }
		}
		return 0;
	}
	if (b == 1) {
		int i = a;
		bool opt = false;
		for (; i < n; i++, opt ^= true) {
			if (!judge(i - a, 1)) break;
			int t = sg(i - a, 1);
			if (!t) { std::cout << (opt ? "Stas" : "Masha") << '\n'; return 0; }
		}
		std::cout << ((n - a) & 1 ? "Stas" : "Masha") << '\n';
		return 0;
	}
	int t = sg(0, 0);
	std::cout << (t ? "Masha" : "Stas") << '\n';
}

